package br.com.gr.jcash.ctr;

import br.com.gr.jcash.util.JsfUtil;
import br.com.gr.jcash.dmp.Usuario;
import br.com.gr.jcash.exception.JCashException;
import br.com.gr.jcash.iface.IUsuarioBO;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

@ManagedBean(name = "loginController")
@RequestScoped
public class LoginController implements Serializable {

    private static final Logger log = Logger.getLogger(LoginController.class.getName());
    @EJB
    private IUsuarioBO bo;
    private Usuario usuario;

    private String login;
    private String nome;
    private String senha1;
    private String senha2;
    
    
    public String logout() {
        String result = "/paginas/index?faces-redirect=true";

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

        try {
            request.getSession(false).invalidate();
            request.logout();
        } catch (ServletException e) {
            log.log(Level.SEVERE, "Failed to logout user!", e);
            result = "/login/loginError?faces-redirect=true";
        }

        return result;
    }

    public boolean isUserLoggedIn() {
        if (remoteUser() != null) {
            return true;
        }
        return false;
    }

    public String remoteUser() {

        return JsfUtil.getUsuarioLogado();

    }

    public String criarUsuario(){
        if (!senha1.equals(senha2)) {
            JsfUtil.addErrorMessage("As senhas informadas não são iguais!");
            return "create";
        }
        
        Usuario user = new Usuario();
        user.setUsuLogin(login);
        user.setUsuSenha(senha1);
        user.setUsuNome(nome);
        
        try {
            bo.criar(user);
            JsfUtil.addSuccessMessage("Usuário criado com sucesso");
            return "login";
        } catch (JCashException ex) {
            JsfUtil.addErrorMessage(ex, "Erro ao gravar o usuário");
            return "create";
        }
    }
    
    public Usuario getUsuario() {
        if (null == usuario) {
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            try {
                String nomeUsuario = context.getUserPrincipal().getName();
                usuario = bo.buscarPorLogin(nomeUsuario);
            } catch (JCashException ex) {
                Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return usuario;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String nomeUsuario) {
        this.login = nomeUsuario;
    }

    public String getSenha1() {
        return senha1;
    }

    public void setSenha1(String senha1) {
        this.senha1 = senha1;
    }

    public String getSenha2() {
        return senha2;
    }

    public void setSenha2(String senha2) {
        this.senha2 = senha2;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    
}
